#include <windows.h>
#include <winbase.h>
#ifndef _SERIE_H
#define _SERIE_H

typedef enum
{
    e_ErrCom_None, // Pas d'erreur
    e_ErrCom_Creation, // Erreur lors de la création du flux
    e_ErrCom_Utilise, // Le port com est déjà utilisé
    e_ErrCom_Inexistant, // Le port com n'existe pas
    e_ErrCom_Timeout, // Timeout lors d'une émission-réception
    e_ErrCom_Emission, // Erreur lors de l'émission
    e_ErrCom_Reception, // Erreur lors de la réception
    e_ErrCom_Definition_Trame, // Erreur de définition de la trame
    e_ErrCom_Nack, // Demande non prise en coompte
    e_ErrCom_Checksum // Erreur de checksum
} e_ErrCom;


#define TIMEOUT -1

typedef enum
{
    CARAC_RECU,
    ERREUR_PORT,
    ERREUR_RECEP
}crRet_E;


HANDLE gl_portSer;


// definitions constantes
// Nom du port série
#define PORT1 "COM1"
#define PORT2 "COM2"
#define PORT3 "COM3"
#define PORT4 "COM4"
#define PORT5 "COM5"

// Définition des vitesses de communication
#define V1200 1200
#define V2400 2400
#define V4800 4800
#define V9600 9600

// Définition du nombre de bits
#define BITS_7 7
#define BITS_8 8

// Définition du nombre de bits de stop
#define BIT_DE_STOP_1 1
#define BIT_DE_STOP_2 2

// Définition de la parité
#define PAS_DE_PARITE 'N'
#define PARITE_IMPAIRE 'O'
#define PARITE_PAIRE 'E'

// Codes de retour génériques
#define OK 1
#define KO 0

// Longueur max réservée pour une trame
#define LG_MAX 150

e_ErrCom ouvreCom(char *strPort, long BaudRate, int BitsSize, int Parity, int StopBits);
e_ErrCom emissionCom(const void *lpBuf, unsigned int nCount);
e_ErrCom receptionCom(void *lpBuf, unsigned int nCountMax, unsigned int *pCountRead);

void initPortSerie(char *argv);
void fermeCom();

e_ErrCom emetCaractere(char carAEmettre);
crRet_E recoitCaractere(char* carRecu, int temspAvantTimeoutEnMilliSec);

int  trouvePremierPortSerieDisponible(void);
void affichePortCOMDisponibles(void);
void afficheEnTeteProgramme(void);

#endif
